﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPPanificadora.classes;
using ASPPanificadora.controller;
using NHibernate;
using ASPPanificadora.Funcoes;

namespace ASPPanificadora.Telas
{
    public partial class TipoUsuarioView : System.Web.UI.Page
    {
        IList<TelaSistema> telaSistema;
        TelaSistemaController telaSistemaController;
        List<TelaSistema> listaTelasSistema = new List<TelaSistema>();
        TelaSistema tela;
        TipoUsuario tipoUsuario;
        TipoUsuarioController tipoUsuarioController;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["TipoUsuario"] == null || !ControleAcessoTela.ConfirmaAcessoTela("TipoUsuarioView", Session["TipoUsuario"]))
                Response.Redirect("~/Default.aspx");


            ((SiteCadastro)Page.Master).btnSalvar.Click += new EventHandler(Salvar);
            ((SiteCadastro)Page.Master).btnPesquisa.Click += new EventHandler(Pesquisar);
            ((SiteCadastro)Page.Master).btnLimpar.Click += new EventHandler(LimparCampos);

            if (!IsPostBack)
            {
                AtualizaTelas();
            }
            else
            {
                
            }
        }

        protected void ExibeMensagem(string msg)
        {
            ((SiteCadastro)Page.Master).txtResultado.Text = msg;
        }

        protected void Salvar(object sender, EventArgs e)
        {
            string msg = "";
            try
            {
                tipoUsuarioController = new TipoUsuarioController();
                tela = new TelaSistema();
                telaSistema = tipoUsuarioController.RecuperarTelaSistema();
                for (int i = 0; i < dtlTelaSistema.Items.Count; i++)
                {
                    if (((CheckBox)dtlTelaSistema.Items[i].FindControl("chbTelaSistema")).Checked)
                    {
                        string nomeTela = ((CheckBox)dtlTelaSistema.Items[i].FindControl("chbTelaSistema")).Text.ToString();
                        tela = telaSistema.Where(c => c.NomeTelaSistema == nomeTela).FirstOrDefault();

                        listaTelasSistema.Add(tela);
                    }
                    
                }
                TipoUsuario tipoUsuario = new TipoUsuario();
                tipoUsuario.Id = Convert.ToInt32(txtCodigo.Text);
                tipoUsuario.NomeTipoUsuario = txtNomeTipoUsuario.Text;

                msg = tipoUsuarioController.Salvar(tipoUsuario, listaTelasSistema);
                txtCodigo.Text = tipoUsuario.Id.ToString();
            }
            catch (Exception ex)
            {
                msg = "Erro: " + ex.Message.ToString();
            }
            finally
            {
                ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
                ExibeMensagem(msg);
            } 

        }

        protected void LimparCampos(object sender, EventArgs e)
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            AtualizaTelas();
            txtCodigo.Text = "0";
            txtNomeTipoUsuario.Text = null;
        }

        protected void Pesquisar(object sender, EventArgs e)
        {            
            if (ValidaCamposPesquisa())
                LimparCampos(sender, e);
            else
            {
                try
                {
                    tipoUsuarioController = new TipoUsuarioController();
                    int id = Convert.ToInt32(((SiteCadastro)Page.Master).txtPesquisaCodigo.Text);
                    tipoUsuario = new TipoUsuario();
                    tipoUsuario = tipoUsuarioController.PesquisarPorId(id);
                    if (tipoUsuario == null)
                        LimparCampos(sender, e);
                    else
                    {
                        telaSistemaController = new TelaSistemaController();
                        telaSistema = telaSistemaController.Recuperar();
                        RedefinirCampos();
                    }
                }
                catch (Exception ex)
                {
                    LimparCampos(sender, e);
                }
            }
        }
        
        private void AtualizaTelas()
        {
            telaSistemaController = new TelaSistemaController();
            telaSistema = telaSistemaController.Recuperar();

            Dictionary<string, object> listaTipoUsuario = new Dictionary<string, object>();
            foreach (TelaSistema tela in telaSistema)
            {
                listaTipoUsuario.Add(tela.NomeTelaSistema, false);
            }

            this.dtlTelaSistema.DataSource = listaTipoUsuario;
            this.dtlTelaSistema.DataBind();            
        }

        private bool ValidaCamposPesquisa()
        {
            if (((SiteCadastro)Page.Master).txtPesquisaCodigo == null || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("") || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("0") || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("1"))
                return true;
            else
                return false;
        }

        private void RedefinirCampos()
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = tipoUsuario.Id.ToString();
            txtNomeTipoUsuario.Text = tipoUsuario.NomeTipoUsuario.ToString();

            Dictionary<string, object> listaTipoUsuario = new Dictionary<string, object>();
            foreach (TelaSistema tela in telaSistema)
            {
                if (tipoUsuario.LigTipoUsuarioTelaSistema.Where(c => c.IdTelaSistema == tela.Id).Select(c => c.IdTelaSistema).FirstOrDefault() == 0)
                    listaTipoUsuario.Add(tela.NomeTelaSistema, false);
                else
                    listaTipoUsuario.Add(tela.NomeTelaSistema, true);
            }
            
            this.dtlTelaSistema.DataSource = listaTipoUsuario;
            this.dtlTelaSistema.DataBind();
        }

    }
}